'use strict';

module.exports = {

  /**
   * 获取随机码
   * @param {number} [length] 随机码位数，默认为16位
   * @param {number} [mode] 模式：1=大小写与数字组合，2=小写与数字组合，3=数字组合
   */
  randomCode(length = 16, mode = 1) {
    const base1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    const base2 = 'abcdefghijklmnopqrstuvwxyz0123456789';
    const base3 = '0123456789';
    const base = mode === 1 ? base1 : (mode === 2 ? base2 : base3);
    const max = base.length;

    let code = '';
    for (let i = 0; i < length; i++) {
      const r = Math.floor(Math.random() * max);
      code += base.charAt(r);
    }
    return code;
  },

  /**
   * 简单校验证件号
   * @param {string} idNo 证件号
   * @param {string} type 证件类型
   * * 1=身份证号
   * * 2=护照
   * * 3=港澳通行证
   * * 4=台湾通行证
   *
   * @return {boolean} true=校验成功， false=校验失败
   */
  checkIdNo(idNo = '', type = 1) {
    switch (type) {
      case 1:
        // 校验身份证
        // * 满足18位
        // * 满足 [6位地区码] + [YYYYMMDD] + [3位顺序码] + [1位校验码]
        if (idNo.length !== 18) {
          return false;
        }
        return /^\d{6}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(idNo);
      case 2:
        // 校验护照
        return /^[a-zA-Z]{5,17}$/.test(idNo) || /^[a-zA-Z0-9]{5,17}$/.test(idNo);
      case 3:
        // 校验港澳通行证
        return /^[HMhm]{1}([0-9]{10}|[0-9]{8})$/.test(idNo);
      case 4:
        // 校验台湾通行证
        return /^[0-9]{8}$/.test(idNo) || /^[0-9]{10}$/.test(idNo);
      default:
        return false;
    }
  },

  /**
   * 手机号码校验
   *
   * @param {string} mobile  手机号码
   */
  checkMobile(mobile) {
    const mobile_number = {
      '001': '^([2-9][0-9]{2})[2-9][0-9]{2}[0-9]{4}$', // 美国
      '0081': '^[1-9]0[0-9]{8}$', // 日本
      '00852': '^(5|6|8|9)[0-9]{7}$', // 香港
      '00853': '^6[0-9]{7}$', // 澳门
      '00886': '^9[0-9]{8}$', // 台湾
      '0065': '^[0-9]{8}$', // 新加坡
      '0086': '^1[34578][0-9]{9}$',
    };
    const area_arr = [];
    for (const i in mobile_number) {
      area_arr.push(i);
    }
    let c_key = '';
    let area = [];

    for (let i = 0; i < area_arr.length; i++) {
      const a = area_arr[i];
      if (mobile.indexOf(a) === 0) {
        c_key = a;
        area = mobile.split(a);
      }
    }

    if (c_key) {
      const m = mobile_number[c_key];
      const regx = new RegExp(m);
      return regx.test(area[1]);
    }
    const regx = new RegExp('^1[34578][0-9]{9}$|^166[0-9]{8}$|^19[89][0-9]{8}$');
    return regx.test(mobile);
  },
};
